﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Vector3 = DDD.Vector3<float>;


namespace DDD {
    /// <summary>
    /// レイ
    /// </summary>
    /// <remarks>
    /// 点<dic>(ox,oy,oz)</dic>から<dic>(dx,dy,dz)</dic>方向に伸びる半直線の光線をあらわします。
    /// これ有効期間(tmin, tmax)が必要なんじゃ？　いらんか
    /// </remarks>
    public struct Ray {
        /// <summary>
        /// コンストラクター
        /// </summary>
        /// <param name="ox">始点のX座標</param>
        /// <param name="oy">始点のY座標</param>
        /// <param name="oz">始点のZ座標</param>
        /// <param name="dx">方向のX成分</param>
        /// <param name="dy">方向のY成分</param>
        /// <param name="dz">方向のZ成分</param>
        internal Ray (float ox, float oy, float oz, float dx, float dy, float dz)
            : this () {
                this.Origin = new Vector3 (ox, oy, oz);
                this.Direction = new Vector3 (dx, dy, dz);
        }

        /// <summary>
        /// 始点
        /// </summary>
        public Vector3 Origin { get; private set; }

        /// <summary>
        /// 方向
        /// </summary>
        public Vector3 Direction { get; private set; }


        /// <summary>
        /// 現在のオブジェクトの状態を表す文字列を返します。
        /// </summary>
        /// <returns>現在のオブジェクトを説明する文字列</returns>
        public override string ToString () {
            return string.Format("Ray : Origin={0}, Direction={1}", Origin, Direction);
        }
    }
}
